﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using RiskMan.DataClass.Models;
using RiskMan.Views.Dialogs;
using RiskMan.DataClass.Models.Level;
using TheControllerRisk.Settings;
using System.Collections.ObjectModel;

namespace RiskMan.Views.Level
{
    /// <summary>
    /// Логика взаимодействия для newLevel.xaml
    /// </summary>
    public partial class SettingLevelItems : Window
    {
        private DataClass.Data data;
        List<Trade> trades;
        Guid globalGuid;
        private ObservableCollection<LevelItem> LevelItems = new ObservableCollection<LevelItem>();

        public SettingLevelItems(Guid globalGuid)
        {
            InitializeComponent();
            data = MainWindow.StaticLevel.DataProvider;
            this.globalGuid = globalGuid;


            LevelItems = (ObservableCollection<LevelItem>)cfg.DeepClone(data.LevelItems);
            trades = data.GetTradeList();
            dtgdLevels.ItemsSource = LevelItems;


            #region Фильтры
            cmbx_ClientCodeFiltr.ItemsSource = trades.Select(a => a.ClientCode).ToList();

            cmbx_InstrumentFiltr.ItemsSource = data.GetSeccodeList();
            cmbx_InstrumentFiltr.SelectedIndex = 0;
            cmbx_ClientCodeFiltr.SelectedIndex = 0;
            #endregion



            //dtgdLevels.ItemsSource = data.LevelItems;

            for (int i = 0; i < dtgdLevels.Items.Count; i++)
            {
                if (((LevelItem)dtgdLevels.Items[i]).GuidLevelItem == globalGuid)
                    dtgdLevels.SelectedIndex = i;
            }
        }

        private void cmbx_TypeLevelEnabled()
        {

            #region Горизонтальный уровень
            if (cmbx_TypeLevel.SelectedValue.ToString() == cfg.HorizontalLevel || cmbx_TypeLevel.SelectedValue.ToString() == cfg.HorizontalLevelFalse)
            {
                txbxPriceLevelHorizontal.IsEnabled = true;

                txbxPriceSecondCandle.IsEnabled = false;
                txbxPriceFirstCandle.IsEnabled = false;
                txbxDateFirstCandle.IsEnabled = false;
                txbxDateSecondCandle.IsEnabled = false;
                cmbxInterval.IsEnabled = false;

                txbxDownLevel.IsEnabled = false;
                txbxUpLevel.IsEnabled = false;

                if (cmbx_TypeLevel.SelectedValue.ToString() == cfg.HorizontalLevel)
                {
                    txbx_Excess.IsEnabled = true;
                    txbxMinProkol.IsEnabled = false;
                    txbxMaxProkol.IsEnabled = false;
                    txbxTimeFalseProboi.IsEnabled = false;
                }
                else
                {
                    txbx_Excess.IsEnabled = false;
                    txbxMinProkol.IsEnabled = true;
                    txbxMaxProkol.IsEnabled = true;
                    txbxTimeFalseProboi.IsEnabled = true;
                }
            } 
            #endregion

            #region Тренд

            if (cmbx_TypeLevel.SelectedValue.ToString() == cfg.TrendLevel || cmbx_TypeLevel.SelectedValue.ToString() == cfg.TrendLevelFalse)
            {
                txbxPriceLevelHorizontal.IsEnabled = false;

                txbxPriceSecondCandle.IsEnabled = true;
                txbxPriceFirstCandle.IsEnabled = true;
                txbxDateFirstCandle.IsEnabled = true;
                txbxDateSecondCandle.IsEnabled = true;
                cmbxInterval.IsEnabled = true;

                txbxDownLevel.IsEnabled = false;
                txbxUpLevel.IsEnabled = false;

                if (cmbx_TypeLevel.SelectedValue.ToString() == cfg.TrendLevel)
                {
                    txbx_Excess.IsEnabled = true;
                    txbxMinProkol.IsEnabled = false;
                    txbxMaxProkol.IsEnabled = false;
                    txbxTimeFalseProboi.IsEnabled = false;
                }
                else
                {
                    txbx_Excess.IsEnabled = false;
                    txbxMinProkol.IsEnabled = true;
                    txbxMaxProkol.IsEnabled = true;
                    txbxTimeFalseProboi.IsEnabled = true;
                }
            } 
            #endregion

            #region Двойной уровень
            if (cmbx_TypeLevel.SelectedValue.ToString() == cfg.DoubleLevel)
            {
                txbxPriceLevelHorizontal.IsEnabled = false;

                txbxPriceSecondCandle.IsEnabled = false;
                txbxPriceFirstCandle.IsEnabled = false;
                txbxDateFirstCandle.IsEnabled = false;
                txbxDateSecondCandle.IsEnabled = false;
                cmbxInterval.IsEnabled = false;

                txbx_Excess.IsEnabled = false;
                txbxMinProkol.IsEnabled = false;
                txbxMaxProkol.IsEnabled = false;
                txbxTimeFalseProboi.IsEnabled = false;

                txbxDownLevel.IsEnabled = true;
                txbxUpLevel.IsEnabled = true;
            } 
            #endregion

        }

        private void Button_Accept_Click(object sender, RoutedEventArgs e)
        {

            #region Основной датагрид
            foreach (var item in data.LevelItems)
            {
                if (item.GuidLevelItem == globalGuid)
                {
                    try
                    {
                        if (cmbx_ClientCode.SelectedIndex >= 0)
                        {
                            item.ClientCode = cmbx_ClientCode.SelectedValue.ToString();
                            List<Trade> trades = data.GetTradeList();

                            for (int i = 0; i < trades.Count; i++)
                                if (trades[i].ClientCode == item.ClientCode)
                                    item.Account = trades[i].Account;
                        }
                        else
                        {
                            new DialogOkCancel("Выберите код клиента(счет)!", "Ошибка добавления");
                            return;
                        }

                        if (cmbx_TypeDeal.SelectedIndex >= 0)
                            item.Operation = cmbx_TypeDeal.SelectedValue.ToString();
                        else
                        {
                            new DialogOkCancel("Выберите вид операции!", "Ошибка добавления");
                            return;
                        }

                        if (cmbx_Instrument.SelectedIndex >= 0)
                            if (cmbx_Instrument.SelectedValue.ToString() != "Не выбран")
                                item.Instrument = cmbx_Instrument.SelectedValue.ToString();
                            else
                            {
                                new DialogOkCancel("Выберите торгуемый инструмент!", "Ошибка добавления");
                                return;
                            }
                        else
                        {
                            new DialogOkCancel("Выберите торгуемый инструмент!", "Ошибка добавления");
                            return;
                        }

                        item.Quantity = Convert.ToInt32(txbxQuantity.Text);
                        item.NumberOfAttempt = Convert.ToInt32(txbxNumberOfAttempt.Text);
                        item.Excess = Convert.ToDouble(txbx_Excess.Text);
                        item.Breakeven = Convert.ToDouble(txbxBreakeven.Text);
                        item.BreakevenOtstup = Convert.ToDouble(txbxBreakevenOtstup.Text);

                        item.TypeLevel = cmbx_TypeLevel.Text;
                        item.trendItem.NameTrend = txbxNameLevel.Text;
                        item.trendItem.HorizontalLevel = Convert.ToDouble(txbxPriceLevelHorizontal.Text);
                        item.trendItem.DateTimeFirstCandle = Convert.ToDateTime(txbxDateFirstCandle.Text);
                        item.trendItem.DateTimeSecondCandle = Convert.ToDateTime(txbxDateSecondCandle.Text);
                        item.trendItem.PriceFirstCandle = Convert.ToDouble(txbxPriceFirstCandle.Text);
                        item.trendItem.PriceSecondCandle = Convert.ToDouble(txbxPriceSecondCandle.Text);
                        item.trendItem.Interval = cmbxInterval.Text;

                        item.trendItem.MinProkol = Convert.ToDouble(txbxMinProkol.Text);
                        item.trendItem.MaxProkol = Convert.ToDouble(txbxMaxProkol.Text);
                        item.trendItem.TimeFalseProboi = Convert.ToInt32(txbxTimeFalseProboi.Text);

                        item.SettingOrderOpenClose.TypePricing = cmbxTypeofPricing.Text;
                        item.SettingOrderOpenClose.TypeStop = cmbxTypeStop.Text;
                        item.SettingOrderOpenClose.StopLimitOtstup = Convert.ToDouble(txbxStopLimitOtstup.Text);
                        item.SettingOrderOpenClose.StopLimitSpred = Convert.ToDouble(txbxStopLimitSpred.Text);
                        item.SettingOrderOpenClose.Profit = Convert.ToDouble(txbxLimitOrderProfit.Text);

                        //Двойной уровень
                        if (item.TypeLevel == cfg.DoubleLevel)
                        {
                            item.trendItem.UpLevel = Convert.ToDouble(txbxUpLevel.Text);
                            item.trendItem.DownLevel = Convert.ToDouble(txbxDownLevel.Text);
                            if (item.trendItem.DownLevel <= 0 || item.trendItem.UpLevel <= 0)
                            {
                                new DialogOkCancel("Параметры трнеда (верхний и нижний уровень) не могут равняться нулю!", "Ошибка добавления");
                                return;
                            }
                        }

                        if (item.NumberOfAttempt <= 0 ||
                         item.Quantity <= 0 || item.SettingOrderOpenClose.Profit <= 0 || item.SettingOrderOpenClose.StopLimitOtstup <= 0)
                        {
                            new DialogOkCancel("Параметр количесвто контрактов/лотов, количество попыток, профит или отступ (ЦА) не может равняться нулю!", "Ошибка добавления");
                            return;
                        }

                        if (item.TypeLevel == cfg.HorizontalLevel || item.TypeLevel == cfg.HorizontalLevelFalse)
                        {
                            if (item.trendItem.HorizontalLevel <= 0)
                            {
                                new DialogOkCancel("Параметр горизонтального уровня не может равнятся нулю!", "Ошибка добавления");
                                return;
                            }
                        }
                        if (item.TypeLevel == cfg.TrendLevel || item.TypeLevel == cfg.TrendLevelFalse)
                        {
                            if (item.trendItem.PriceFirstCandle <= 0 || item.trendItem.PriceSecondCandle <= 0)
                            {
                                new DialogOkCancel("Параметры трнеда не можут равнятся нулю!", "Ошибка добавления");
                                return;
                            }
                            //необходимо сделать провеку по датам!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        }



                        item.SettingOrderOpenClose.TypeOrderOpen = cmbxTypeOrderOpen.Text;
                        item.SettingOrderOpenClose.KillOrderOpen = cmbxKillOrderOpen.Text;
                        item.SettingOrderOpenClose.OtstupForOpenOrder = Convert.ToDouble(txbxOtstupForOpenOrder.Text);
                        item.SettingOrderOpenClose.TimeWiatOpenPoz = Convert.ToInt32(txbxTimeWiatOpenPoz.Text);
                        item.SettingOrderOpenClose.SpredForKillOrderOpen = Convert.ToDouble(txbxSpredForKillOrderOpen.Text);

                        if (cmbxKillOrderOpen.Text != cfg.Unknown)
                        {
                            if (cmbxKillOrderOpen.Text == cfg.KillofTime)
                                if (item.SettingOrderOpenClose.TimeWiatOpenPoz == 0)
                                    new DialogOkCancel("Время ожидания не может равняться нулю!", "Ошибка добавления");

                            if (cmbxKillOrderOpen.Text == cfg.KillOfDictance)
                                if (item.SettingOrderOpenClose.SpredForKillOrderOpen == 0)
                                    new DialogOkCancel("Отклонение цнеы не может равняться нулю!", "Ошибка добавления");

                            if (cmbxKillOrderOpen.Text == cfg.KillOfTimeOrDistance)
                                if (item.SettingOrderOpenClose.TimeWiatOpenPoz == 0 || item.SettingOrderOpenClose.SpredForKillOrderOpen == 0)
                                    new DialogOkCancel("Время ожидания и отлонение цены не может равняться нулю!", "Ошибка добавления");
                        }


                    }
                    catch
                    { }
                }

            }
            #endregion

            #region Местный датагрид
            foreach (var item in LevelItems)
            {
                if (item.GuidLevelItem == globalGuid)
                {
                    try
                    {
                        if (cmbx_ClientCode.SelectedIndex >= 0 && cmbx_ClientCode.SelectedItem != cfg.Unknown)
                        {
                            item.ClientCode = cmbx_ClientCode.SelectedValue.ToString();
                            List<Trade> trades = data.GetTradeList();

                            for (int i = 0; i < trades.Count; i++)
                                if (trades[i].ClientCode == item.ClientCode)
                                    item.Account = trades[i].Account;
                        }
                        else
                        {
                            new DialogOkCancel("Выберите код клиента(счет)!", "Ошибка добавления");
                            return;
                        }

                        if (cmbx_TypeDeal.SelectedIndex >= 0)
                            item.Operation = cmbx_TypeDeal.SelectedValue.ToString();
                        else
                        {
                            new DialogOkCancel("Выберите вид операции!", "Ошибка добавления");
                            return;
                        }

                        if (cmbx_Instrument.SelectedIndex >= 0)
                            if (cmbx_Instrument.SelectedValue.ToString() != "Не выбран")
                                item.Instrument = cmbx_Instrument.SelectedValue.ToString();
                            else
                            {
                                new DialogOkCancel("Выберите торгуемый инструмент!", "Ошибка добавления");
                                return;
                            }
                        else
                        {
                            new DialogOkCancel("Выберите торгуемый инструмент!", "Ошибка добавления");
                            return;
                        }

                        item.Quantity = Convert.ToInt32(txbxQuantity.Text);
                        item.NumberOfAttempt = Convert.ToInt32(txbxNumberOfAttempt.Text);
                        item.Excess = Convert.ToDouble(txbx_Excess.Text);
                        item.Breakeven = Convert.ToDouble(txbxBreakeven.Text);
                        item.BreakevenOtstup = Convert.ToDouble(txbxBreakevenOtstup.Text);

                        item.TypeLevel = cmbx_TypeLevel.Text;
                        item.trendItem.NameTrend = txbxNameLevel.Text;
                        item.trendItem.HorizontalLevel = Convert.ToDouble(txbxPriceLevelHorizontal.Text);
                        item.trendItem.DateTimeFirstCandle = Convert.ToDateTime(txbxDateFirstCandle.Text);
                        item.trendItem.DateTimeSecondCandle = Convert.ToDateTime(txbxDateSecondCandle.Text);
                        item.trendItem.PriceFirstCandle = Convert.ToDouble(txbxPriceFirstCandle.Text);
                        item.trendItem.PriceSecondCandle = Convert.ToDouble(txbxPriceSecondCandle.Text);
                        item.trendItem.Interval = cmbxInterval.Text;

                        item.trendItem.MinProkol = Convert.ToDouble(txbxMinProkol.Text);
                        item.trendItem.MaxProkol = Convert.ToDouble(txbxMaxProkol.Text);
                        item.trendItem.TimeFalseProboi = Convert.ToInt32(txbxTimeFalseProboi.Text);

                        item.SettingOrderOpenClose.TypePricing = cmbxTypeofPricing.Text;
                        item.SettingOrderOpenClose.TypeStop = cmbxTypeStop.Text;
                        item.SettingOrderOpenClose.StopLimitOtstup = Convert.ToDouble(txbxStopLimitOtstup.Text);
                        item.SettingOrderOpenClose.StopLimitSpred = Convert.ToDouble(txbxStopLimitSpred.Text);
                        item.SettingOrderOpenClose.Profit = Convert.ToDouble(txbxLimitOrderProfit.Text);

                        //Двойной уровень
                        if (item.TypeLevel == cfg.DoubleLevel)
                        {
                            item.trendItem.UpLevel = Convert.ToDouble(txbxUpLevel.Text);
                            item.trendItem.DownLevel = Convert.ToDouble(txbxDownLevel.Text);
                            if (item.trendItem.DownLevel <= 0 || item.trendItem.UpLevel <= 0)
                            {
                                new DialogOkCancel("Параметры трнеда (верхний и нижний уровень) не могут равняться нулю!", "Ошибка добавления");
                                return;
                            }
                        }

                        if (item.NumberOfAttempt <= 0 ||
                         item.Quantity <= 0 || item.SettingOrderOpenClose.Profit <= 0 || item.SettingOrderOpenClose.StopLimitOtstup <= 0)
                        {
                            new DialogOkCancel("Параметр количесвто контрактов/лотов, количество попыток, профит или отступ (ЦА) не может равняться нулю!", "Ошибка добавления");
                            return;
                        }

                        if (item.TypeLevel == cfg.HorizontalLevel || item.TypeLevel == cfg.HorizontalLevelFalse)
                        {
                            if (item.trendItem.HorizontalLevel <= 0)
                            {
                                new DialogOkCancel("Параметр горизонтального уровня не может равнятся нулю!", "Ошибка добавления");
                                return;
                            }
                        }
                        if (item.TypeLevel == cfg.TrendLevel || item.TypeLevel == cfg.TrendLevelFalse)
                        {
                            if (item.trendItem.PriceFirstCandle <= 0 || item.trendItem.PriceSecondCandle <= 0)
                            {
                                new DialogOkCancel("Параметры трнеда не можут равнятся нулю!", "Ошибка добавления");
                                return;
                            }
                            //необходимо сделать провеку по датам!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        }



                        item.SettingOrderOpenClose.TypeOrderOpen = cmbxTypeOrderOpen.Text;
                        item.SettingOrderOpenClose.KillOrderOpen = cmbxKillOrderOpen.Text;
                        item.SettingOrderOpenClose.OtstupForOpenOrder = Convert.ToDouble(txbxOtstupForOpenOrder.Text);
                        item.SettingOrderOpenClose.TimeWiatOpenPoz = Convert.ToInt32(txbxTimeWiatOpenPoz.Text);
                        item.SettingOrderOpenClose.SpredForKillOrderOpen = Convert.ToDouble(txbxSpredForKillOrderOpen.Text);

                        if (cmbxKillOrderOpen.Text != cfg.Unknown)
                        {
                            if (cmbxKillOrderOpen.Text == cfg.KillofTime)
                                if (item.SettingOrderOpenClose.TimeWiatOpenPoz == 0)
                                    new DialogOkCancel("Время ожидания не может равняться нулю!", "Ошибка добавления");

                            if (cmbxKillOrderOpen.Text == cfg.KillOfDictance)
                                if (item.SettingOrderOpenClose.SpredForKillOrderOpen == 0)
                                    new DialogOkCancel("Отклонение цнеы не может равняться нулю!", "Ошибка добавления");

                            if (cmbxKillOrderOpen.Text == cfg.KillOfTimeOrDistance)
                                if (item.SettingOrderOpenClose.TimeWiatOpenPoz == 0 || item.SettingOrderOpenClose.SpredForKillOrderOpen == 0)
                                    new DialogOkCancel("Время ожидания и отлонение цены не может равняться нулю!", "Ошибка добавления");
                        }

                    }
                    catch
                    { }
                }

            }
            #endregion
        }

        private void Button_AddRow_Click(object sender, RoutedEventArgs e)
        {
            LevelItem item = new LevelItem();
            NewLevel nlvi = new NewLevel(item, data, false);
            nlvi.ShowDialog();

            if (item.Account != null)
            {
                data.LevelItems.Add(item);
                LevelItems.Add(item);
            }

            //Update();
            //cfg.SetLog("Добавлена новый уровень", data.ListBox_Logs, GetType(), MethodBase.GetCurrentMethod());

        }

        private void btnCopy_Click(object sender, RoutedEventArgs e)
        {
            if (dtgdLevels.SelectedItems.Count == 1)
            {
                int index = dtgdLevels.SelectedIndex + 1;
                //dtgdLevel.UnselectAll();
                try
                {
                    if (new DialogOkCancel("Вы действительно хотите скопировать строку " + index + "?", "Внимание").Result == MessageBoxResult.OK)
                    {
                        foreach (var item in data.LevelItems)
                        {
                            if (item.GuidLevelItem == ((LevelItem)(dtgdLevels.SelectedItem)).GuidLevelItem)
                            {
                                var tmp = (LevelItem)cfg.DeepClone(item);
                                tmp.isRun = false;
                                tmp.GuidLevelItem = Guid.NewGuid();
                                data.LevelItems.Add(tmp);
                                tmp.TradeList = new ObservableCollection<DataClass.Models.NotBasModels.TradesOpen>();
                                LevelItems.Add(tmp);
                            }
                        }

                    }
                }
                catch
                { }
            }
        }

        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            bool flagDel = false;
            try
            {
                for (int j = 0; j < dtgdLevels.SelectedItems.Count; j++)
                {
                    bool delete = false;
                    for (int i = 0; i < data.LevelItems.Count; i++)
                    {
                        if (dtgdLevels.SelectedItems.Count > 0)
                            if (((LevelItem)dtgdLevels.SelectedItems[j]).GuidLevelItem == data.LevelItems[i].GuidLevelItem)
                            {

                                data.LevelItems.Remove(data.LevelItems[i]);
                                delete = true;
                                flagDel = true;
                                i--;
                            }

                    }
                    for (int i = 0; i < LevelItems.Count; i++)
                    {
                        if (dtgdLevels.SelectedItems.Count > 0)
                            if (((LevelItem)dtgdLevels.SelectedItems[j]).GuidLevelItem == LevelItems[i].GuidLevelItem)
                                LevelItems.Remove(LevelItems[i]);
                    }
                    if (delete == true)
                        j--;

                }
            }
            catch
            {

            }
            if (flagDel == false)
                new DialogMessage("Не выделено ни одной строки для удаления.", "Внимание!");
        }

        private void cmbx_TypeLevel_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            cmbx_TypeLevelEnabled();
        }

        private void txbxPriceFirstCandle_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if (!Char.IsDigit(e.Text, 0))
                e.Handled = true;

            if ((e.Text.IndexOf('.') == 0 || e.Text.IndexOf(',') == 0) && ((TextBox)sender).Text.IndexOf('.') == -1 && ((TextBox)sender).Text.IndexOf(',') == -1)
                e.Handled = false;
        }

        private void txbxPriceFirstCandle_GotFocus(object sender, RoutedEventArgs e)
        {
            if (((TextBox)sender).Text != "")
                if (Convert.ToDouble(((TextBox)sender).Text) == 0)
                {
                    ((TextBox)sender).Text = "";
                }
        }

        private void txbxNumberOfAttempt_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if (!Char.IsDigit(e.Text, 0))
                e.Handled = true;
        }

        //private void dtgdLevels_Loaded(object sender, RoutedEventArgs e)
        //{
        //    cmbx_TypeLevelEnabled();
        //}

        private void dtgdLevels_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                if (((DataGrid)sender).SelectedItems.Count > 0)
                    foreach (var item in data.LevelItems)
                    {
                        if (item.GuidLevelItem == ((LevelItem)(((DataGrid)sender).SelectedItem)).GuidLevelItem)
                        {
                            globalGuid = ((LevelItem)(((DataGrid)sender).SelectedItem)).GuidLevelItem;

                            if (item.SettingOrderOpenClose == null)
                                item.SettingOrderOpenClose = new SettingOrderOpenClosePoz();

                            cmbx_ClientCode.ItemsSource = trades.Select(a => a.ClientCode).ToList();
                            cmbx_ClientCode.SelectedIndex = 0;
                            for (int i = 0; i < cmbx_ClientCode.Items.Count; i++)
                            {
                                if (cmbx_ClientCode.Items[i].ToString() == item.ClientCode)
                                    cmbx_ClientCode.SelectedIndex = i;
                            }
                            cmbx_TypeDeal.ItemsSource = new List<string>() { cfg.Buy, cfg.Sell };
                            cmbx_TypeLevel.ItemsSource = new List<string>() { cfg.HorizontalLevel, cfg.HorizontalLevelFalse, cfg.TrendLevel, cfg.TrendLevelFalse, cfg.DoubleLevel };
                            cmbxInterval.ItemsSource = new List<string>() { cfg.min1, cfg.min2, cfg.min3, cfg.min4, cfg.min5, cfg.min6, cfg.min10, cfg.min15, cfg.min20, cfg.min30, cfg.hour1, cfg.hour2, cfg.hour4, cfg.day, cfg.week, cfg.month };
                            cmbx_TypeDeal.SelectedIndex = 0;
                            cmbxInterval.SelectedIndex = 0;
                            txbxQuantity.Text = item.Quantity.ToString();
                            txbxNumberOfAttempt.Text = item.NumberOfAttempt.ToString();
                            txbx_Excess.Text = item.Excess.ToString();
                            txbxBreakeven.Text = item.Breakeven.ToString();
                            txbxBreakevenOtstup.Text = item.BreakevenOtstup.ToString();
                            

                            if (item.Operation != null)
                                cmbx_TypeDeal.SelectedValue = item.Operation;
                            if (item.TypeLevel != null)
                                cmbx_TypeLevel.SelectedItem = item.TypeLevel;
                            else
                                cmbx_TypeLevel.SelectedIndex = 0;

                            if (item.trendItem == null)
                                item.trendItem = new DataClass.Models.Level.TrendItem();
                            if (item.trendItem.Interval != null)
                                cmbxInterval.SelectedValue = item.trendItem.Interval;
                            txbxNameLevel.Text = item.trendItem.NameTrend;

                            txbxPriceLevelHorizontal.Text = item.trendItem.HorizontalLevel.ToString();
                            txbxDateFirstCandle.Text = item.trendItem.DateTimeFirstCandle.ToString();
                            txbxPriceFirstCandle.Text = item.trendItem.PriceFirstCandle.ToString();
                            txbxDateSecondCandle.Text = item.trendItem.DateTimeSecondCandle.ToString();
                            txbxPriceSecondCandle.Text = item.trendItem.PriceSecondCandle.ToString();

                            txbxMinProkol.Text = item.trendItem.MinProkol.ToString();
                            txbxMaxProkol.Text = item.trendItem.MaxProkol.ToString();
                            txbxTimeFalseProboi.Text = item.trendItem.TimeFalseProboi.ToString();

                            #region Seccode
                            cmbx_Instrument.ItemsSource = data.GetSeccodeList();
                            cmbx_Instrument.SelectedIndex = 0;
                            for (int i = 0; i < cmbx_Instrument.Items.Count; i++)
                            {
                                if (cmbx_Instrument.Items[i].ToString() == item.Instrument)
                                    cmbx_Instrument.SelectedIndex = i;
                            }
                            #endregion

                            //Двойной уровень
                            txbxDownLevel.Text = item.trendItem.DownLevel.ToString();
                            txbxUpLevel.Text = item.trendItem.UpLevel.ToString();

                            //заявки на открытие позиций
                            //параметры на заявки на открытие
                            cmbxTypeOrderOpen.ItemsSource = new List<string>() { cfg.openOrderLimit, cfg.openOrderMarket };
                            cmbxTypeOrderOpen.SelectedIndex = 0;
                            cmbxKillOrderOpen.ItemsSource = new List<string>() { cfg.Unknown, cfg.KillofTime, cfg.KillOfDictance, cfg.KillOfTimeOrDistance };
                            cmbxKillOrderOpen.SelectedIndex = 0;
                            if (item.SettingOrderOpenClose.TypeOrderOpen != null)
                                cmbxTypeOrderOpen.SelectedValue = item.SettingOrderOpenClose.TypeOrderOpen;
                            if (item.SettingOrderOpenClose.KillOrderOpen != null)
                                cmbxKillOrderOpen.SelectedValue = item.SettingOrderOpenClose.KillOrderOpen;

                            txbxOtstupForOpenOrder.Text = item.SettingOrderOpenClose.OtstupForOpenOrder.ToString();
                            txbxTimeWiatOpenPoz.Text = item.SettingOrderOpenClose.TimeWiatOpenPoz.ToString();
                            txbxSpredForKillOrderOpen.Text = item.SettingOrderOpenClose.SpredForKillOrderOpen.ToString();

                            //Параметры стоп-заявки
                            cmbxTypeofPricing.ItemsSource = new List<string>() { cfg.TypeCloseOrderAuto, cfg.TypeCloseOrderManual };
                            cmbxTypeStop.ItemsSource = new List<string>() { cfg.LinkedOrder };
                            cmbxTypeofPricing.SelectedIndex = 0;
                            cmbxTypeStop.SelectedIndex = 0;
                            if (item.SettingOrderOpenClose.TypePricing != null)
                                cmbxTypeofPricing.SelectedValue = item.SettingOrderOpenClose.TypePricing;
                            if (item.SettingOrderOpenClose.TypeStop != null)
                                cmbxTypeStop.SelectedValue = item.SettingOrderOpenClose.TypeStop;

                            txbxStopLimitOtstup.Text = item.SettingOrderOpenClose.StopLimitOtstup.ToString();
                            txbxStopLimitSpred.Text = item.SettingOrderOpenClose.StopLimitSpred.ToString();
                            txbxLimitOrderProfit.Text = item.SettingOrderOpenClose.Profit.ToString();

                            break;
                        }
                    }
            }
            catch { }
        }

        private void cmbx_ClientCodeFiltr_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            GetFilterClientCode();
        }

        private void GetFilterClientCode()
        {
            if (cmbx_ClientCodeFiltr.SelectedItem != null && cmbx_InstrumentFiltr.SelectedItem != null)
            {
                if (cmbx_ClientCodeFiltr.SelectedItem.ToString() != cfg.Unknown && cmbx_InstrumentFiltr.SelectedItem.ToString() == cfg.Unknown)
                    dtgdLevels.ItemsSource = LevelItems.Where(a => a.ClientCode == cmbx_ClientCodeFiltr.SelectedItem.ToString()).ToList();
                if (cmbx_ClientCodeFiltr.SelectedItem.ToString() == cfg.Unknown && cmbx_InstrumentFiltr.SelectedItem.ToString() != cfg.Unknown)
                    dtgdLevels.ItemsSource = LevelItems.Where(a => a.Instrument == cmbx_InstrumentFiltr.SelectedItem.ToString()).ToList();

                if (cmbx_ClientCodeFiltr.SelectedItem.ToString() == cfg.Unknown && cmbx_InstrumentFiltr.SelectedItem.ToString() == cfg.Unknown)
                    dtgdLevels.ItemsSource = LevelItems;

                if (cmbx_ClientCodeFiltr.SelectedItem.ToString() != cfg.Unknown && cmbx_InstrumentFiltr.SelectedItem.ToString() != cfg.Unknown)
                    dtgdLevels.ItemsSource = LevelItems.Where(a => a.ClientCode == cmbx_ClientCodeFiltr.SelectedItem.ToString()).
                        Where(a => a.Instrument == cmbx_InstrumentFiltr.SelectedItem.ToString()).ToList();
            }
        }

        private void cmbx_InstrumentFiltr_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            GetFilterClientCode();
        }

        private void txbxSpredForKillOrderOpen_LostFocus(object sender, RoutedEventArgs e)
        {
            if (((TextBox)sender).Text == "")
                ((TextBox)sender).Text = 0.ToString();
        }

        private void btnSoundSetting_LostFocus(object sender, RoutedEventArgs e)
        {
            
        }

        private void btnSoundSetting_Click(object sender, RoutedEventArgs e)
        {
            ((Button)sender).Focusable = false;
            SoundPanel soundPanel = new SoundPanel();
            soundPanel.ShowDialog();
        }

        private void cmbxTypeOrderOpen_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }

    }
}
